﻿
using PSE.ProcessManager.Entity;
using System.Collections.Generic;
namespace PSE.ProcessManager.Common.Gateway
{
    public class ServiceEvents
    {
        /// <summary>
        /// Delegate para o evento de mensagens recebidas
        /// </summary>
        /// <param name="message">Mensagem</param>
        public delegate void MessageReceived(BaseMessage message);
        /// <summary>
        /// Delegate para o evento disparado quando o server recebe uma conexão do Client.
        /// </summary>
        /// <param name="messageId">Id da mensagem que será escutada pelo client.</param>
        public delegate void ClientConnected(int processId, string clientIdentifier, IListenerServiceCallback request);

        /// <summary>
        /// Delegate para o evento disparado quando o client se desconectar.
        /// </summary>
        /// <param name="request">Channel do Client que se desconectou.</param>
        public delegate void ClientDisconnected(IListenerServiceCallback request);

        /// <summary>
        /// Delegate para o evento disparado quando o client confirma a conexão com o Server.
        /// </summary>
        public delegate void ServerConnected();

        /// <summary>
        /// Delegate para o evento disparado quando o client solicita a verificação de execução de um processo.
        /// </summary>
        /// <param name="message"></param>
        public delegate int IsProcessRunning(int processId);

        /// <summary>
        /// Delegate para o evento dispara quando o client solicita a lista do log de um processo
        /// </summary>
        /// <param name="processId">Id do processo</param>
        /// <returns></returns>
        public delegate List<LogEntity> RetrievedLogList(int processId);
        
        /// <summary>
        /// Delegate para o evento dispara quando o client solicita o ultimo log de um processo
        /// </summary>
        /// <param name="processId">Id do processo</param>
        /// <returns></returns>
        public delegate LogEntity RetrievedLastProcessLog(int processId);
    }
}
